//
//  YDOauthViewModel.swift
//  weibo
//
//  Created by 孙亚东 on 16/6/25.
//  Copyright © 2016年 Sunyadong. All rights reserved.
//

import UIKit

//存放和model打交道 还有和网络请求相关的代码,

class YDOauthViewModel: NSObject {
    
    
    //创建一个单例对象保存属性
    
    static let shareOauthViewModel =  YDOauthViewModel()
    
    var userModel: YDUserModel?
    
    
   private override init() {
        
        super.init()
        
        userModel = YDUserModel.readModel()
        
    }
    
    //创建一个方法，返回是否已经登录
    
    
    //重写get方法
    var isLogin: Bool {
    
        return userModel?.access_token == nil ? false : true
    
    }
    
    //直接放回access_token
    
    var access_token: String{
    
    
        return (userModel?.access_token)!
    
    
    }
    
    
    func loadToken (code: String, successInfo: ()->(), failureInfo: ()->()){
        
        /**
         *
         https://api.weibo.com/oauth2/access_token
         HTTP请求方式
         POST
         请求参数
         必选	类型及范围	说明
         client_id	true	string	申请应用时分配的AppKey。
         client_secret	true	string	申请应用时分配的AppSecret。
         grant_type	true	string	请求的类型，填写authorization_code
         
         grant_type为authorization_code时
         必选	类型及范围	说明
         code	true	string	调用authorize获得的code值。
         redirect_uri	true	string	回调地址，需需与注册应用里的回调地址一致。
         
         */
         
         //获取单例对象
        let manager = YDClientManager.shareManager
        
        manager.responseSerializer.acceptableContentTypes?.insert("text/plain")
        
        let dic = ["client_id":AppKey,
            "client_secret":AppSecret,
            "grant_type":"authorization_code",
            "code":code,
            "redirect_uri":AppRedirectURL
            
        ]
        
        manager.sendRequest(.POST, URLString: "https://api.weibo.com/oauth2/access_token", parameters: dic, progress: nil, success: { (NSURLSessionDataTask, json) -> Void in
            
//            print(json)
            
            //self.backBtnClick()
            
            //token的值已经获取到，返回的anyobject是个字典，开始进行字典转模型
            //1. 将anyobjec强行转成字典
            
            //2.  将字典转为模型
            guard let jsonDict = json as? [String: AnyObject] else {
                
                return
                
            }
            
            //实现字典转模型
            
            let model = YDUserModel(dict: jsonDict)
            
            print(model.access_token)
            
            

            
            self.loadUserInfo(model, infoSuccess: successInfo, infoFailed: failureInfo)
            
            
            }, failure: { (NSURLSessionDataTask, error) -> Void in
                
//                print(error)
                
                failureInfo()
                
        })
        
    }
    

    func loadUserInfo (model: YDUserModel, infoSuccess: ()->(),infoFailed: ()->()){
        
        
        
        guard let token = model.access_token,uid = model.uid else {
            
            return
            
        }
        
        /*
        
        
        必选	类型及范围	说明
        access_token	true	string	采用OAuth授权方式为必填参数，OAuth授权后获得。
        uid	false	int64	需要查询的用户ID。
        screen_name	false	string	需要查询的用户昵称。
        
        */
        
        let dic = [ "access_token":token,
            "uid":uid
        ]
        
        
        let manager = YDClientManager.shareManager
        
        manager.sendRequest(.GET, URLString: "https://api.weibo.com/2/users/show.json", parameters: dic, progress: nil, success: { (NSURLSessionDataTask, JSON) -> Void in
            
            
//            print(JSON)
            
            infoSuccess()
            
            //将JSON转为字典
            
            guard let jsonDic = JSON as? [String: AnyObject] else {
                
                
                return
                
            }
            
            
//            print(jsonDic)
            
            //进行字典转模型
            
            let screenName = jsonDic["screen_name"] as? String
            
            let image_url = jsonDic["profile_image_url"] as? String
            
            
            model.screen_name = screenName
            
            model.profile_image_url = image_url
            
            
            //将model赋值
           self.userModel = model
            
            model.saveModel()
            
            
            }) { (NSURLSessionDataTask, error) -> Void in
                
                
//                print(error)
                
                infoFailed()
                
        }
        
        
        
        
        
    }
    
  

}
